home *** CD-ROM | disk | FTP | other *** search
/ Essentials of Interactive Physiology / Essentials of Interactive Physiology.iso / pc / files / evaluation / evaluationWinIE.dcr / 00023_questionParentmicro.ls < prev    next >
Encoding:
Text File  |  2002-04-02  |  7.4 KB  |  220 lines

  1. property pkMaxDigits, poOwner, poAnswerBtns, poDotMan, piNumAnswers, psBaseMemberName, psButtonType, pzEvalType, piBaseOffset, piQuestionOffset, pliAnswerOffset, piFromChapterOffset, piFirstAnswerSprite, piQuestionSprite, piFromChapterSprite, piResponseSprites, piCorrectAnswer, plAnswerOrder
  2.  
  3. on new me, xoDotMan, xoOwner, xiNumAnswers, xsButtonType, xkMaxDigits
  4.   poDotMan = xoDotMan
  5.   poOwner = xoOwner
  6.   piNumAnswers = xiNumAnswers
  7.   pzEvalType = xsButtonType
  8.   case xsButtonType of
  9.     #quiz:
  10.       psButtonType = "Toggle"
  11.     #test:
  12.       psButtonType = "Radio"
  13.     otherwise:
  14.       psButtonType = xsButtonType
  15.   end case
  16.   piBaseOffset = 10
  17.   pkMaxDigits = xkMaxDigits
  18.   return me
  19. end
  20.  
  21. on mInitQuestionTemplate me, xsBaseMemberName
  22.   mInitLetters(me, xsBaseMemberName)
  23.   mInitTextFields(me)
  24. end
  25.  
  26. on mInitLetters me, xsBaseMemberName
  27.   vlbuttons = []
  28.   viSprite = mGiveDots(poDotMan, piNumAnswers)
  29.   psBaseMemberName = xsBaseMemberName
  30.   repeat with i = 1 to piNumAnswers
  31.     vsMemberName = xsBaseMemberName & IntegerToString(i, pkMaxDigits)
  32.     vlAbuttonInfo = [#sprite: viSprite + i - 1, #name: vsMemberName, #ID: i]
  33.     add(vlbuttons, vlAbuttonInfo)
  34.   end repeat
  35.   poAnswerBtns = new(script(psButtonType & "GroupParent"), vlbuttons, #none)
  36.   mSetOwner(poAnswerBtns, me)
  37.   mDisable(poAnswerBtns, 0)
  38.   piResponseSprites = mGiveDots(poDotMan, piNumAnswers)
  39.   vsMember = psBaseMemberName & IntegerToString(1, pkMaxDigits) & ".up"
  40.   vpOffset = (point(member(vsMember).width, 0) / 2) + (point(member("right").width, 0) / 2) + point(piBaseOffset, 0)
  41.   repeat with i = 1 to piNumAnswers
  42.     viSprite = piResponseSprites + i - 1
  43.     vsMember = psBaseMemberName & IntegerToString(i, pkMaxDigits) & ".up"
  44.     AlignCenteredSpriteToMember(viSprite, vsMember)
  45.     set the loc of sprite viSprite to the loc of sprite viSprite - vpOffset
  46.   end repeat
  47. end
  48.  
  49. on mInitTextFields me
  50.   piQuestionSprite = mGiveDot(poDotMan)
  51.   vsLocatorMember = psBaseMemberName & IntegerToString(1, pkMaxDigits) & ".up"
  52.   AlignTextBoxToSpacer(piQuestionSprite, vsLocatorMember)
  53.   piQuestionOffset = member("questionText").height
  54.   vpOffset = point(0, -piBaseOffset - piQuestionOffset)
  55.   set the loc of sprite piQuestionSprite to the loc of sprite piQuestionSprite + vpOffset
  56.   set the member of sprite piQuestionSprite to "questionText"
  57.   set the ink of sprite piQuestionSprite to 36
  58.   piFirstAnswerSprite = mGiveDots(poDotMan, piNumAnswers)
  59.   pliAnswerOffset = []
  60.   vsLocatorMember = psBaseMemberName & IntegerToString(1, pkMaxDigits) & ".up"
  61.   vpOffset = point(member(vsLocatorMember).width + piBaseOffset, member(vsLocatorMember).height / 2)
  62.   repeat with i = 1 to piNumAnswers
  63.     viNextSprite = piFirstAnswerSprite + i - 1
  64.     vsNum = IntegerToString(i, pkMaxDigits)
  65.     vsLocatorMember = psBaseMemberName & IntegerToString(i, pkMaxDigits) & ".up"
  66.     AlignTextBoxToSpacer(viNextSprite, vsLocatorMember)
  67.     viOffset = member("answerText" & vsNum).height / 2
  68.     add(pliAnswerOffset, viOffset)
  69.     set the loc of sprite viNextSprite to the loc of sprite viNextSprite + vpOffset - point(0, viOffset)
  70.     set the member of sprite viNextSprite to "answerText" & IntegerToString(i, pkMaxDigits)
  71.     set the ink of sprite viNextSprite to 36
  72.   end repeat
  73.   piFromChapterSprite = mGiveDot(poDotMan)
  74.   vsLocatorMember = psBaseMemberName & IntegerToString(piNumAnswers, pkMaxDigits) & ".up"
  75.   AlignTextBoxToSpacer(piFromChapterSprite, vsLocatorMember)
  76.   vihAnswerText = member("answerText" & IntegerToString(piNumAnswers, pkMaxDigits)).height
  77.   vihBtn = member(vsLocatorMember).height
  78.   if vihAnswerText > vihBtn then
  79.     vpOffset = point(0, (vihBtn / 2) + (vihAnswerText / 2) + piBaseOffset)
  80.     piFromChapterOffset = (vihBtn / 2) + (vihAnswerText / 2)
  81.   else
  82.     vpOffset = point(0, vihBtn + piBaseOffset)
  83.     piFromChapterOffset = vihBtn
  84.   end if
  85. end
  86.  
  87. on mInitSprites me
  88.   mResetDots(poDotMan)
  89. end
  90.  
  91. on mHandleToggleBtnClick me, xiID
  92.   viNdx = mGetNdxOfID(poAnswerBtns, xiID)
  93.   mDisableABtn(poAnswerBtns, viNdx, 1)
  94.   if xiID = piCorrectAnswer then
  95.     vsMember = "right"
  96.     puppetSound("legalDrag.snd")
  97.   else
  98.     vsMember = "wrong"
  99.     puppetSound("illegalDrag.snd")
  100.   end if
  101.   vzEvent = symbol(string(pzEvalType) & vsMember)
  102.   set the member of sprite (piResponseSprites + viNdx - 1) to vsMember
  103.   mNotify(poOwner, vzEvent, xiID)
  104. end
  105.  
  106. on mHandleRadioBtnClick me, xiID
  107.   if xiID = piCorrectAnswer then
  108.     vsMember = "right"
  109.   else
  110.     vsMember = "wrong"
  111.   end if
  112.   vzEvent = symbol(string(pzEvalType) & vsMember)
  113.   mNotify(poOwner, vzEvent, xiID)
  114. end
  115.  
  116. on mHandleQuestionReview me, xiQuestion
  117.   mReviewAQuestion(me, xiQuestion)
  118. end
  119.  
  120. on mResetQuestion me
  121.   member("questionText").text = EMPTY
  122.   repeat with i = 1 to piNumAnswers
  123.     member("answerText" & IntegerToString(i, pkMaxDigits)).text = EMPTY
  124.     set the member of sprite (piResponseSprites + i - 1) to "blackdot"
  125.   end repeat
  126.   mUndepressChosenBtn(poAnswerBtns)
  127.   mDisable(poAnswerBtns, 0)
  128. end
  129.  
  130. on mSetQuestionData me, xsData, xlAnswerOrder
  131.   mResetQuestion(me)
  132.   vsOld = the itemDelimiter
  133.   the itemDelimiter = TAB
  134.   member("questionText").text = item 1 of xsData
  135.   set the loc of sprite piQuestionSprite to the loc of sprite piQuestionSprite + point(0, piQuestionOffset - member("questionText").height)
  136.   piQuestionOffset = member("questionText").height
  137.   delete item 1 of xsData
  138.   if item 1 of xsData <> EMPTY then
  139.     piCorrectAnswer = value(item 1 of xsData)
  140.     delete item 1 of xsData
  141.     xlAnswerOrder = GetListFrom1toX(piNumAnswers)
  142.     mResetBtnIDs(poAnswerBtns, xlAnswerOrder)
  143.   else
  144.     piCorrectAnswer = 1
  145.     mResetBtnIDs(poAnswerBtns, xlAnswerOrder)
  146.   end if
  147.   viNumAnswers = the number of items in xsData
  148.   if viNumAnswers < piNumAnswers then
  149.     repeat with i = viNumAnswers to piNumAnswers
  150.       mHideABtn(poAnswerBtns, i)
  151.     end repeat
  152.   else
  153.     if viNumAnswers > piNumAnswers then
  154.       viNumAnswers = piNumAnswers
  155.     else
  156.       repeat with i = piNumAnswers to viNumAnswers
  157.         mShowABtn(poAnswerBtns, i)
  158.       end repeat
  159.     end if
  160.   end if
  161.   piNumAnswers = viNumAnswers
  162.   repeat with i = 1 to piNumAnswers
  163.     vsNum = IntegerToString(i, pkMaxDigits)
  164.     viSprite = piFirstAnswerSprite + i - 1
  165.     member("answerText" & vsNum).text = item getAt(xlAnswerOrder, i) of xsData
  166.     viOffset = member("answerText" & vsNum).height / 2
  167.     set the loc of sprite viSprite to the loc of sprite viSprite + point(0, getAt(pliAnswerOffset, i) - viOffset)
  168.     setAt(pliAnswerOffset, i, viOffset)
  169.   end repeat
  170.   the itemDelimiter = vsOld
  171. end
  172.  
  173. on mSetFromChapter me, xiChapter
  174. end
  175.  
  176. on mShowAnswer me
  177.   set the member of sprite (piResponseSprites + mGetNdxOfID(poAnswerBtns, piCorrectAnswer) - 1) to "right"
  178. end
  179.  
  180. on mSelectAnswer me, viWhich
  181.   if viWhich then
  182.     viNdx = mGetNdxOfID(poAnswerBtns, viWhich)
  183.     mDepressABtn(poAnswerBtns, viNdx)
  184.     mDisableABtn(poAnswerBtns, viNdx, 1)
  185.   end if
  186. end
  187.  
  188. on mMarkAnswer me, xiID
  189.   if xiID = piCorrectAnswer then
  190.     vsMember = "right"
  191.   else
  192.     if xiID <> 0 then
  193.       vsMember = "wrong"
  194.     end if
  195.   end if
  196.   set the member of sprite (piResponseSprites + mGetNdxOfID(poAnswerBtns, xiID) - 1) to vsMember
  197. end
  198.  
  199. on mDisable me, xbDisable
  200.   mDisable(poAnswerBtns)
  201. end
  202.  
  203. on mNotify me, xiEvent, xOpcode
  204.   case xiEvent of
  205.     #ToggleBtnClick:
  206.       mHandleToggleBtnClick(me, xOpcode)
  207.     #RadioBtnClick:
  208.       mHandleRadioBtnClick(me, xOpcode)
  209.   end case
  210. end
  211.  
  212. on mCleanUp me
  213.   mCleanUp(poAnswerBtns)
  214.   member("questionText").text = EMPTY
  215.   repeat with i = 1 to piNumAnswers
  216.     member("answerText" & IntegerToString(i, pkMaxDigits)).text = EMPTY
  217.   end repeat
  218.   member("fromChapterText").text = EMPTY
  219. end
  220.